Java网络编程:Socket和WebSocket

您所在的位置:网站首页 python web和java web区别 Java网络编程:Socket和WebSocket

Java网络编程:Socket和WebSocket

2023-09-25 07:59| 来源: 网络整理| 查看: 265

一、Socket总结

1.1、Socket简介

在计算机通信领域,Socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定。通过 Socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。

Socket所处层次

 

图中可以看到Socket是应用层与TCP/IP协议族通信的中间软件抽象层,就是提供了tcp/ip协议的抽象,对外提供了一套接口,同过这个接口就可以统一方便的使用tcp/ip协议的功能。

1.2、Socket常用方法图解

图片来源于网络,侵删

1.3、Socket网络通信流程

Socket基于Tcp连接的通信流程图

1.4、Java中Socket使用举例

在Java中,我们使用Socket有两种,一个是基于TCP的Socket,一个是基于UDP的DatagramSocket,本篇只分析基于TCP的Socket。现在我们来看Socket的使用:

客户端:指明主机端口创建Socket,获取输出流,写入数据。

Socket socket = null; OutputStream os = null; try { socket = new Socket("192.168.1.106",9200); os = socket.getOutputStream(); os.write("hello server !".getBytes()); } catch (IOException e) { e.printStackTrace(); }finally { try { if(os != null){ os.close(); } if(socket != null){ socket.close(); } } catch (IOException e) { e.printStackTrace(); } }

服务端:指明绑定的端口,创建ServerSocket,开启端口监听。

ServerSocket serverSocket; try { serverSocket = new ServerSocket(9200); } catch (IOException e) { return; } while (isRunning){ try { Socket client = serverSocket.accept(); handleClient(client); } catch (IOException e) { e.printStackTrace(); } } try { serverSocket.close(); } catch (IOException e) { e.printStackTrace(); }

这里只是一个简单的示例,当然实际开发中可能需要更多的东西,比如在handleClient(client)处理数据的时候加入线程池去处理,以及client的关闭等,这里只是简单的使用。

二、WebSocket总结

2.1、WebSocket简介

WebSocket 是 HTML5 一种新的应用层协议,它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯。

在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在此WebSocket 协议中,为我们实现通讯服务带来了两大好处:

a. Header

互相沟通的Header是很小的-大概只有 2 Bytes

b. Server Push

服务器可以主动传送数据给客户端

2.2、WebSocket作用

WebSocket可以实现网站即时通讯技术,替代轮询

     网站上的即时通讯是很常见的,比如网页的QQ,聊天系统等。按照以往的技术能力实现即时通讯通常是采用轮询、Comet技术解决。

     HTTP协议是非持久化的,单工的网络协议,在建立连接后只允许浏览器向服务器发出请求后,服务器才能返回相应的数据。当需要即时通讯时,通过轮询在特定的时间间隔(如1秒),由浏览器向服务器发送Request请求,然后将最新的数据返回给浏览器。这样的方法最明显的缺点就是需要不断的发送请求,而且通常HTTP request的Header是非常长的,为了传输一个很小的数据 需要付出巨大的代价,是很不合算的,占用了很多的宽带。而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。

    然而WebSocket全双工通信协议的出现可以弥补这一缺点。在WebSocket中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

2.3、WebSocket与Socket的区别

Socket其实并不是一个协议,就是提供了tcp/ip协议的抽象,对外提供了一套接口,通过这个接口就可以统一方便的使用tcp/ip协议的功能。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

WebSocket则是Html5开始提供的一个典型的应用层协议,可以用来实现网站的即时通讯。

 

补充:现在一些手机即时通讯app基本都是通过XMPP协议来实现的,服务器端比如 Netty + openfire等等。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3